[LON-CAPA-cvs] cvs: loncom /interface lonpickstudent.pm

raeburn raeburn at source.lon-capa.org
Wed Dec 24 17:32:44 EST 2025


raeburn		Wed Dec 24 22:32:44 2025 EDT

  Modified files:              
    /loncom/interface	lonpickstudent.pm 
  Log:
  - WCAG 2 compliance.
    - Support "Skip to main content" when tabbing in page.
    - Headings descend sequentially
    - Include labels for form elements
    - Header for each column in a data table by using <th></th> for screen
      reader.
  
  
Index: loncom/interface/lonpickstudent.pm
diff -u loncom/interface/lonpickstudent.pm:1.35 loncom/interface/lonpickstudent.pm:1.36
--- loncom/interface/lonpickstudent.pm:1.35	Wed Dec 24 17:23:25 2025
+++ loncom/interface/lonpickstudent.pm	Wed Dec 24 22:32:44 2025
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Pick a student from the classlist
 #
-# $Id: lonpickstudent.pm,v 1.35 2025/12/24 17:23:25 raeburn Exp $
+# $Id: lonpickstudent.pm,v 1.36 2025/12/24 22:32:44 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -47,7 +47,6 @@
     $r->print(&Apache::loncommon::start_page("Selecting a User",undef,
 					     {'no_nav_bar' => 1}));
 
-
     &Apache::loncommon::get_unprocessed_cgi
         ($ENV{'QUERY_STRING'},['filter','form','unameelement','udomelement',
 			       'roles','courseadv','clicker','identelement']);
@@ -64,7 +63,8 @@
     }
 
     unless (($env{'form.roles'}) || ($allowed)) {
-	$r->print(&mt('No context.').
+        $r->print("\n".'<div class="LC_landmark" role="main" id="LC_main_content">');
+	$r->print(&mt('No context.').'</div>'.
 		  &Apache::loncommon::end_page());
         return OK;
     }
@@ -76,7 +76,7 @@
     $filter = quotemeta($filter);
     my $change = &mt('Change');
     my $filterbutton =<<FILTER;
-  <input type="text" name="filter" value="$encoded_filter" />
+  <input type="text" name="filter" value="$encoded_filter" /></label>
   <input type="submit" name="Change" value="$change" />
 FILTER
     foreach my $name ('form','unameelement','udomelement','roles','courseadv','clicker','identelement') {
@@ -89,12 +89,13 @@
         if ($env{'request.course.id'}) {
             my $crstype = &Apache::loncommon::course_type();
             my $showrole = &Apache::lonnet::plaintext('st',$crstype);
-            $filtermsg = &mt("Showing users with role of '[_1]' with name starting: [_2]",
+            $filtermsg = '<label>'
+                        .&mt("Showing users with role of '[_1]' with name starting: [_2]",
                              $showrole,$filterbutton);
         } else {
-            $filtermsg =
-	        &mt('Showing users with a name starting with [_1]',
-	            $filterbutton);
+            $filtermsg = '<label>'
+                        .&mt('Showing users with a name starting with [_1]',
+                             $filterbutton);
         }
     }
     if ($filter eq '') {
@@ -146,27 +147,38 @@
 </script>
 ENDSCRIPT
 
+    $r->print("\n".'<div class="LC_landmark" role="main" id="LC_main_content">');
     $r->print('<form action="">');
     if ($allowed && (!$env{'form.roles'})) {
         unless ($env{'form.courseadv'} eq 'none') {
 # -------------------------------------------------------- Get course personnel
-	    $r->print('<h3>'.$env{'course.'.$env{'request.course.id'}.'.description'}.
-		      '</h3>');
+	    $r->print('<h1 class="LC_heading_2">'.$env{'course.'.$env{'request.course.id'}.'.description'}.
+		      '</h1>');
 	    my %coursepersonnel=
 	        &Apache::lonnet::get_course_adv_roles();
-	    $r->print(&Apache::loncommon::start_data_table());
-	    foreach my $role (sort(keys(%coursepersonnel))) {
-	        foreach my $user (split(/\,/,$coursepersonnel{$role})) {
-		    my ($puname,$pudom)=split(/\:/,$user);
-		    $r->print(&Apache::loncommon::start_data_table_row().
-			      '<td>'.
-			      '<input type="button" value="'.&mt('Select').'" onclick="gochoose('.
-			      "'".$puname."','".$pudom."')".'" /></td><td>'.$role.'</td><td>'.
-			      &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($puname,$pudom),$puname,$pudom).'</td>'.
-			      &Apache::loncommon::end_data_table_row());
+            if (keys(%coursepersonnel)) {
+                $r->print(&Apache::loncommon::start_data_table().
+                          &Apache::loncommon::start_data_table_header_row('LC_visually_hidden').
+                          '<th>'.&mt('select').'</th>'.
+                          '<th>'.&mt('role').'</th>'.
+                          '<th>'.&mt('name').'</th>'.
+                          &Apache::loncommon::end_data_table_header_row()."\n");
+                foreach my $role (sort(keys(%coursepersonnel))) {
+                    foreach my $user (split(/\,/,$coursepersonnel{$role})) {
+                        my ($puname,$pudom)=split(/\:/,$user);
+                        $r->print(&Apache::loncommon::start_data_table_row().
+                                  '<td>'.
+                                  '<input type="button" value="'.&mt('Select').
+                                  '" onclick="gochoose('.
+                                  "'".$puname."','".$pudom."')".'" /></td>'.
+                                  '<td>'.$role.'</td><td>'.
+                                  &Apache::loncommon::aboutmewrapper(
+                                      &Apache::loncommon::plainname($puname,$pudom),$puname,$pudom).
+                                  '</td>'.&Apache::loncommon::end_data_table_row());
+                    }
                 }
+                $r->print(&Apache::loncommon::end_data_table().'<br /><hr />');
             }
-            $r->print(&Apache::loncommon::end_data_table().'<br /><hr />');
         }
 
         if ($filtermsg ne '') {
@@ -184,7 +196,7 @@
             my $clicker=$env{'form.clicker'};
             my @fragments=();
             if ($clicker) {
-               $r->print('<h1>'.&mt('Clicker: [_1]',$clicker).'</h1>');
+               $r->print('<h1 class="LC_heading_2">'.&mt('Clicker: [_1]',$clicker).'</h1>');
                my $clicklength=length($clicker);
                my $maxlength=$clicklength-1;
                if ($maxlength>2) {
@@ -260,8 +272,7 @@
 	    } else {
 	        $r->print(&Apache::loncommon::start_data_table().
 	    	          &Apache::loncommon::start_data_table_header_row().
-		          &Apache::loncommon::end_data_table_header_row().
-		          '<th> </th>'.
+		          '<th>'.&mt('select').'</th>'.
 		          '<th>'.&mt('username').'</th>'.
 		          '<th>'.&mt('domain').'</th>'.
 		          '<th>'.&mt('Name').'</th>'.
@@ -275,9 +286,9 @@
 	    }
         }
     } else {
-	$r->print('<h3>'.&mt('Users with Roles Assigned by').' '.
+	$r->print('<h1 class="LC_heading_2">'.&mt('Users with Roles Assigned by').' '.
 		  &Apache::loncommon::plainname($env{'user.name'},
-						$env{'user.domain'}).'</h3>');
+						$env{'user.domain'}).'</h1>');
 	$r->print($filtermsg);
         $r->rflush();
 
@@ -314,7 +325,7 @@
 	}
 	$r->print(&Apache::loncommon::end_data_table().'</p>');
     }
-    $r->print('</form>'.&Apache::loncommon::end_page());
+    $r->print('</form></div>'.&Apache::loncommon::end_page());
     return OK;
 }
 




More information about the LON-CAPA-cvs mailing list