[LON-CAPA-cvs] cvs: loncom /interface groupboards.pm grouproster.pm loncommon.pm longroup.pm lonmsgdisplay.pm

raeburn raeburn at source.lon-capa.org
Wed Jan 21 15:55:08 EST 2026


raeburn		Wed Jan 21 20:55:08 2026 EDT

  Modified files:              
    /loncom/interface	groupboards.pm grouproster.pm loncommon.pm 
                     	longroup.pm lonmsgdisplay.pm 
  Log:
  - WCAG 2 compliance
    - Include landmark for page's main content to support "Skip to main content"
    - Sequential headings
    - Include labels for form elements
    - Replace use of <table> with <div> for layout
  
  
-------------- next part --------------
Index: loncom/interface/groupboards.pm
diff -u loncom/interface/groupboards.pm:1.23 loncom/interface/groupboards.pm:1.24
--- loncom/interface/groupboards.pm:1.23	Tue Sep  8 23:54:40 2020
+++ loncom/interface/groupboards.pm	Wed Jan 21 20:55:08 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Group Bulletin Boards Manager
 #
-# $Id: groupboards.pm,v 1.23 2020/09/08 23:54:40 raeburn Exp $
+# $Id: groupboards.pm,v 1.24 2026/01/21 20:55:08 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -112,13 +112,14 @@
             if ($outcome eq 'ok') {
                 my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
                 $r->print(&mt('The new discussion board was added successfully.').'<br />');
-                $r->print('<table border="0"><tr><td>'.
+                $r->print('<div class="LC_floatleft">'.
                           '<a href="'.$newurl.'?group='.$group.'&'.$refarg.
-                          '">'.&mt('Edit [_1] board',$bbtitle).'</a></td>'.
-                           '<td>  </td><td>'.
+                          '">'.&mt('Edit [_1] board',$bbtitle).'</a></div>'.
+                          '<div class="LC_floatleft">'.
                           '<a href="/adm/groupboards?group='.$group.'&'.
                           $refarg.'">'.&mt('View all group discussion boards').
-                          '</a></td></tr></table>');
+                          '</a></div>'."\n".
+                          '<div style="padding:0;clear:both;margin:0;border:0"></div>');
                 if ($lockfreed ne 'ok') {
                     $r->print(&mt('There was a problem removing a lockfile for the group ([_1]).',$description).'<br />'.
                               &mt('This may prevent creation of additional discussion boards in this group.').'<br />'.
@@ -130,7 +131,7 @@
                 $r->print(&mt('There was a problem creating the new discussion board - [_1]','<span class="LC_error">'.$outcome.'</span>').'<br /><a href="/adm/groupboards?group='.$group.'">'.
                          &mt('Return to discussion boards').'</a>');
             }
-            $r->print(&Apache::loncommon::end_page());
+            $r->print('</div>'.&Apache::loncommon::end_page());
             return OK;
         }
     }
@@ -191,7 +192,7 @@
                  .'</p>'
         );
     }
-    $r->print(&Apache::loncommon::end_page());
+    $r->print('</div>'.&Apache::loncommon::end_page());
     return OK;
 }
 
@@ -245,7 +246,7 @@
     my $output = &boards_header($cdom,$cnum,$group,$description,$gpterm,
                                 $ucgpterm,$bodytitle,$refarg);
     $output .= $earlyout;
-    $output .= &Apache::loncommon::end_page();
+    $output .= '</div>'.&Apache::loncommon::end_page();
     return $output;
 }
 
@@ -279,7 +280,8 @@
           text=>"Discussion Boards",
           title=>"Display group discussion boards"},);
     $output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('Group discussion boards - [_1]',$description),
-                                                   undef,undef,undef,undef,1);
+                                                   undef,undef,undef,undef,1)."\n".
+               '<div class="LC_landmark" role="main" id="LC_main_content">'."\n";
     return $output;
 }
 
Index: loncom/interface/grouproster.pm
diff -u loncom/interface/grouproster.pm:1.11 loncom/interface/grouproster.pm:1.12
--- loncom/interface/grouproster.pm:1.11	Tue Sep  8 23:54:40 2020
+++ loncom/interface/grouproster.pm	Wed Jan 21 20:55:08 2026
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: grouproster.pm,v 1.11 2020/09/08 23:54:40 raeburn Exp $
+# $Id: grouproster.pm,v 1.12 2026/01/21 20:55:08 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -126,7 +126,7 @@
     &roster_table($r,$cdom,$cnum,$group,$can_view,$view_details,$viewgrps,
                   $editgrps,$available,$gpterm,$ucgpterm);
 
-    $r->print(&Apache::loncommon::end_page());
+    $r->print('</div>'.&Apache::loncommon::end_page());
     return OK;
 }
 
@@ -155,8 +155,9 @@
                                        '<script type="text/javascript">'.
                                        $jscript.'</script>',$args);
     if ($env{'form.ref'} eq 'popup') {
-        $output .= '<h3>'.&mt('Group membership status - [_1]',$description).
-                   '</h3>';
+        $output .= '<div class="LC_landmark" role="main" id="LC_main_content">'."\n".
+                   '<h1 class="LC_heading_2">'.&mt('Group membership status - [_1]',$description).
+                   '</h1>';
     } else {
         my $view_permission =
             &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
@@ -178,7 +179,8 @@
               text=>"Membership Roster",
               title=>"Display group membership"},);
         $output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('Group membership status - [_1]',$description),
-                                                       undef,undef,undef,undef,1);
+                                                       undef,undef,undef,undef,1)."\n".
+                   '<div class="LC_landmark" role="main" id="LC_main_content">'."\n";
     }
     return $output;
 }
@@ -228,7 +230,7 @@
             $r->print(&mt('There are no membership data to display for this '.$gpterm.'.'));  
             return;  
         }  
-        $r->print('<br /><form name="rosterstatus" method="post" action="/adm/grouproster">'.&mt('Membership status: ').'<select name="status">');
+        $r->print('<br /><form name="rosterstatus" method="post" action="/adm/grouproster"><label for="memberstatus">'.&mt('Membership status').'</label>: <select name="status" id="memberstatus">');
         foreach my $type ('active','previous','future','all') {
             $r->print('<option value="'.$type.'" ');
             if ($status eq $type) {
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.1500 loncom/interface/loncommon.pm:1.1501
--- loncom/interface/loncommon.pm:1.1500	Tue Jan 20 02:31:01 2026
+++ loncom/interface/loncommon.pm	Wed Jan 21 20:55:08 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.1500 2026/01/20 02:31:01 raeburn Exp $
+# $Id: loncommon.pm,v 1.1501 2026/01/21 20:55:08 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -7934,6 +7934,14 @@
   padding: 2px 4px 2px 4px;
 }
 
+div.LC_gridcell_even {
+  background-color: $data_table_dark;
+}
+
+div.LC_gridcell_odd {
+  background-color: $data_table_light;
+}
+
 div.LC_autoenroll_heading {
   margin: 5px;
   padding: 5px;
@@ -8476,7 +8484,8 @@
   border-spacing: 1px;
 }
 
-table.LC_group_priv_box td.LC_pick_box_title {
+table.LC_group_priv_box td.LC_pick_box_title,
+table.LC_group_priv_box th.LC_pick_box_title {
   background: $tabbg;
   font-weight: bold;
   text-align: right;
@@ -8499,7 +8508,7 @@
   font-weight: bold;
 }
 
-table.LC_group_priv td {
+div.LC_group_priv {
   text-align: left;
   padding: 0;
 }
Index: loncom/interface/longroup.pm
diff -u loncom/interface/longroup.pm:1.32 loncom/interface/longroup.pm:1.33
--- loncom/interface/longroup.pm:1.32	Tue Jun 20 14:03:52 2023
+++ loncom/interface/longroup.pm	Wed Jan 21 20:55:08 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # accessor routines used to provide information about course groups 
 #
-# $Id: longroup.pm,v 1.32 2023/06/20 14:03:52 raeburn Exp $
+# $Id: longroup.pm,v 1.33 2026/01/21 20:55:08 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -773,22 +773,26 @@
         if ($target eq 'tex') {
             $output = '<table cellspacing="4" cellpadding="4">';
         } else {
-            $output = &Apache::loncommon::start_data_table();
+            $output = '<div role="grid" class="LC_grid" style="border: 1px solid black;">';
         }
+        my $count = 0;
         foreach my $tool (@available) {
+            $count ++;
             if ($target eq 'tex') {
                 $output .= '<tr><td>'.&mt($menu{$tool}{text}).'</td></tr>';
             } else {
-                $output .= &Apache::loncommon::start_data_table_row()
-                          .'<td><a href="'.$menu{$tool}{href}.'">'
-                          .&mt($menu{$tool}{text}).'</a></td>'
-                          .&Apache::loncommon::end_data_table_row();
+                my $css = ($count % 2) ? 'LC_gridcell_odd' : 'LC_gridcell_even';
+                $output .= '<div role="row" class="LC_grid_row">'
+                          .'<div role="gridcell" class="LC_grid_cell '.$css.'">'
+                          .'<a href="'.$menu{$tool}{href}.'">'
+                          .&mt($menu{$tool}{text}).'</a></div>'
+                          .'</div>';
             }
         }
         if ($target eq 'tex') {
             $output .= '</table>';
         } else {
-            $output .= &Apache::loncommon::end_data_table();
+            $output .= '</div>';
         }
         if ($target eq 'tex') {
             $output = &Apache::lonxml::xmlparse($r,'tex',&mt('Available functions').'<br /><br />'.$output);
Index: loncom/interface/lonmsgdisplay.pm
diff -u loncom/interface/lonmsgdisplay.pm:1.206 loncom/interface/lonmsgdisplay.pm:1.207
--- loncom/interface/lonmsgdisplay.pm:1.206	Tue Dec 16 20:01:18 2025
+++ loncom/interface/lonmsgdisplay.pm	Wed Jan 21 20:55:08 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines for messaging display
 #
-# $Id: lonmsgdisplay.pm,v 1.206 2025/12/16 20:01:18 raeburn Exp $
+# $Id: lonmsgdisplay.pm,v 1.207 2026/01/21 20:55:08 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -647,6 +647,7 @@
                                      'active'   => 'Broadcast to Active Members',
                                      'previous' => 'Broadcast (Bcc) to Former Members',
                                      'future'   => 'Broadcast (Bcc) to Future Members',
+                                     'msgtype'  => 'Use Bcc or Ccc for each recipient',
                                     );
         foreach my $user (sort(keys(%{$memberinfo}))) {
             my $status = $$memberinfo{$user}{status};
@@ -679,7 +680,7 @@
                               'onclick="javascript:toggleAll('."this.form,'uncheck'".')" />'.
                               '</span>');
                     if ($status eq 'active') {
-                        $r->print((' 'x3).'<select name="groupmail">'.
+                        $r->print((' 'x3).'<select name="groupmail" aria-label="'.$lt{'msgtype'}.'">'.
                                  '<option value="bcc" selected="selected">'.&mt('Bcc').'</option>'.
                                  '<option value="cc">'.&mt('Cc').'</option>'.
                                '</select>');
@@ -693,10 +694,10 @@
                     foreach my $key (sort(keys(%{$Sortby{$status}}))) {
                         foreach my $user (@{$Sortby{$status}{$key}}) {
                             $r->print(&Apache::loncommon::start_data_table_row().
-                                '<td><span class="LC_nobreak"><input type="checkbox" '.
+                                '<td><span class="LC_nobreak"><label><input type="checkbox" '.
                                 'name="selectedusers_forminput" value="'.
                                 $user.':'.$status.'" />'.
-                                $$memberinfo{$user}{'fullname'}.'</span></td>'.
+                                $$memberinfo{$user}{'fullname'}.'</label></span></td>'.
                                 '<td>'.$$memberinfo{$user}{'uname'}.'</td>'.
                                 '<td>'.$$memberinfo{$user}{'udom'}.'</td>'.
                                 &Apache::loncommon::end_data_table_row());


More information about the LON-CAPA-cvs mailing list