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

raeburn raeburn at source.lon-capa.org
Mon May 4 18:03:46 EDT 2026


raeburn		Mon May  4 22:03:46 2026 EDT

  Modified files:              
    /loncom/interface	lonrequestcourse.pm 
  Log:
  - WCAG 2 compliance
    Include labels for form elements.
    Sequential headings.
    Group form elements in fieldset with legend for screenreaders.
    Satisfy minimum spacing between touch targets.
    Replace use of <table> for layout with <div>.
    Eliminate onfocus="this.blur() ... open window, to allow tab-only access.  
  
  
-------------- next part --------------
Index: loncom/interface/lonrequestcourse.pm
diff -u loncom/interface/lonrequestcourse.pm:1.121 loncom/interface/lonrequestcourse.pm:1.122
--- loncom/interface/lonrequestcourse.pm:1.121	Sun Feb  8 22:51:04 2026
+++ loncom/interface/lonrequestcourse.pm	Mon May  4 22:03:46 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Request a course
 #
-# $Id: lonrequestcourse.pm,v 1.121 2026/02/08 22:51:04 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.122 2026/05/04 22:03:46 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1853,9 +1853,9 @@
                         $section_form .=
                     &Apache::lonhtmlcommon::row_title(&mt('Add another')).
                     '<input name="sectotal" type="hidden" value="'.$sectotal.'" />'.
-                    '<input name="addsection" type="checkbox" value="'.$sectotal.'"'.
+                    '<label><input name="addsection" type="checkbox" value="'.$sectotal.'"'.
                     ' onclick="javascript:nextPage(document.'.$formname.",'".$env{'form.state'}.
-                   "'".');" />'.&mt('Add?').&Apache::lonhtmlcommon::row_closure();
+                   "'".');" />'.&mt('Add?').'</label>'.&Apache::lonhtmlcommon::row_closure();
                     }
                 }
             }
@@ -1881,29 +1881,33 @@
                 $crosslist_form .= 
                     &Apache::lonhtmlcommon::row_title(&mt('Add another')).
                     '<input name="crosslisttotal" type="hidden" value="'.$crosslisttotal.'" />'.
-                    '<input name="addcrosslist" type="checkbox" value="'.$crosslisttotal.'"'.
+                    '<label><input name="addcrosslist" type="checkbox" value="'.$crosslisttotal.'"'.
                     ' onclick="javascript:nextPage(document.'.$formname.",'".$env{'form.state'}.
-                   "'".');" />'.&mt('Add?').&Apache::lonhtmlcommon::row_closure();
+                   "'".');" />'.&mt('Add?').'</label>'.&Apache::lonhtmlcommon::row_closure();
                 $sections .=  &Apache::lonhtmlcommon::row_headline.
-                              '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Crosslist').' '.&mt('Crosslisted courses for auto-enrollment').'</h3>'.
+                              '<h2 class="LC_heading_2">'.&Apache::loncommon::help_open_topic('Course_Request_Crosslist').' '.&mt('Crosslisted courses for auto-enrollment').'</h2>'.
                               &Apache::lonhtmlcommon::row_closure(1).
                               $crosslist_form;
             }
             $hasauto = 1;
             $autoenroll = 
                 &Apache::lonhtmlcommon::row_title(&Apache::loncommon::help_open_topic('Course_Request_Autoadd').' '.&mt('Add registered students automatically')).
+                '<fieldset class="LC_borderless">'.
+                '<legend class="LC_visually_hidden">'.&mt('Automated Adds').'</legend>'.
                 '<span class="LC_nobreak"><label>'.
                 '<input type="radio" name="autoadds" value="1">'.
                 &mt('Yes').'</label>'.(' 'x3).'<label>'.
                 '<input type="radio" name="autoadds" value="0" checked="checked">'.
-                &mt('No').'</label></span>'.
+                &mt('No').'</label></span></fieldset>'.
                 &Apache::lonhtmlcommon::row_closure(1).
                 &Apache::lonhtmlcommon::row_title(&Apache::loncommon::help_open_topic('Course_Request_Autodrop').' '.&mt('Drop unregistered students automatically')).
+                '<fieldset class="LC_borderless">'.
+                '<legend class="LC_visually_hidden">'.&mt('Automated Drops').'</legend>'.
                 '<span class="LC_nobreak"><label>'.
                 '<input type="radio" name="autodrops" value="1">'.
                 &mt('Yes').'</label>'.(' 'x3).'<label>'.
                 '<input type="radio" name="autodrops" value="0" checked="checked">'.
-                &mt('No').'</label></span>'. 
+                &mt('No').'</label></span></fieldset>'. 
                 &Apache::lonhtmlcommon::row_closure(1).
                 &date_setting_table($starttime,$endtime,$formname,'enroll',
                                     $hasauto,undef,%enrolltitles);
@@ -1934,7 +1938,7 @@
     }
     if ($autoenroll) {
         $output .= &Apache::lonhtmlcommon::row_headline('Auto-enroll').
-                   '<h3>'.&mt('Auto-enrollment settings').'</h3>'.
+                   '<h2 class="LC_heading_2">'.&mt('Auto-enrollment settings').'</h2>'.
                    &Apache::lonhtmlcommon::row_closure(1).
                    $autoenroll;
     }
@@ -3238,17 +3242,18 @@
     }
     my %lt = &clone_text($crstype);
     my $output .= 
-        &Apache::lonhtmlcommon::row_title($lt{'dmn'}).'<label>'.
-        &Apache::loncommon::select_dom_form($dom,'clonedom').'</label>'.
+        &Apache::lonhtmlcommon::row_title('<label for="clonedom">'.$lt{'dmn'}).
+        &Apache::loncommon::select_dom_form($dom,'clonedom','','','','','','','clonedom').
         &Apache::lonhtmlcommon::row_closure(1).
         &Apache::lonhtmlcommon::row_title('<label for="clonecrs">'.$lt{'cid'}.'</label>').
-        '<input type="text" size="25" name="clonecrs" id="clonecrs" value="" onfocus="this.blur();opencrsbrowser('."'$formname','clonecrs','clonedom','','','','$type'".')" />'.
+        '<input type="text" size="25" name="clonecrs" id="clonecrs" value="" readonly="readonly" />'.
         ' '.
         &Apache::loncommon::selectcourse_link($formname,'clonecrs','clonedom','','','',$type).
         &Apache::lonhtmlcommon::row_closure(1).
         &Apache::lonhtmlcommon::row_title($lt{'dsh'}).
-        '<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.
-        $lt{'dsh'}.'</legend><label>'.
+        '<fieldset class="LC_borderless" style="line-height: 185%;">'.
+        '<legend class="LC_visually_hidden">'.$lt{'dsh'}.'</legend>'.
+        '<label>'.
         '<input type="radio" name="datemode" value="delete" /> '.$lt{'ncd'}.
         '</label><br /><label>'.
         '<input type="radio" name="datemode" value="preserve" /> '.$lt{'prd'}.
@@ -3259,8 +3264,9 @@
         '</fieldset>'.
         &Apache::lonhtmlcommon::row_closure(1).
         &Apache::lonhtmlcommon::row_title($lt{'dpl'}).
-        '<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.
-        $lt{'dpl'}.'</legend><label>'.
+        '<fieldset class="LC_borderless" style="line-height: 185%;">'.
+        '<legend class="LC_visually_hidden">'.$lt{'dpl'}.'</legend>'.
+        '<label>'.
         '<input type="radio" name="tinyurls" value="delete" /> '.$lt{'nsl'}.
         '</label><br /><label>'.
         '<input type="radio" name="tinyurls" value="transfer" /> '.$lt{'tsl'}.
@@ -3310,10 +3316,10 @@
         $sel = $context;
         if ($context eq 'crosslist') {
             $sel .= '_'.$num;
-            $instsec = &mt('Institutional section').'<br />'.
-                       '<input type="text" size="10" name="'.$sel.'_instsec" />';
-            $lcsec = &mt('LON-CAPA section').'<br />'.
-                     '<input type="text" size="10" name="'.$sel.'_lcsec" />';
+            $instsec = '<label>'.&mt('Institutional section').'<br />'.
+                       '<input type="text" size="10" name="'.$sel.'_instsec" /></label>';
+            $lcsec = '<label>'.&mt('LON-CAPA section').'<br />'.
+                     '<input type="text" size="10" name="'.$sel.'_lcsec" /></label>';
         }
         if (@{$codetitles} > 0) {
             my $lastitem = pop(@{$codetitles});
@@ -3376,12 +3382,18 @@
             push(@$codetitles,$lastitem);    
         } elsif ($context eq 'crosslist') {
             $output .= &Apache::lonhtmlcommon::row_title($rowtitle{$context}).
-                       '<table><tr><td align="center">'.
-                       '<span class="LC_nobreak">'.&mt('Include?').
-                       '<input type="checkbox" name="'.$sel.'" value="1" /></span>'.
-                       '</td><td align="center">'.&mt('Institutional ID').'<br />'.
-                       '<input type="text" size="10" name="'.$sel.'_instsec" />'.
-                       '</td><td align="center">'.$lcsec.'</td></tr></table>'.
+                       '<div class="LC_grid" role="grid" style="margin: 0;">'.
+                       '<div class="LC_grid_row" role="row">'.
+                       '<div class="LC_grid_cell" role="gridcell"'.
+                       ' style="text-align: center; vertical-align: middle;">'.
+                       '<span class="LC_nobreak"><label>'.
+                       '<input type="checkbox" name="'.$sel.'" value="1" />'.
+                       &mt('Include?').'</label></span>'.
+                       '</div><div class="LC_grid_cell" role="gridcell" style="text-align: center;">'.
+                       '<label>'.&mt('Institutional ID').'<br />'.
+                       '<input type="text" size="10" name="'.$sel.'_instsec" /></label>'.
+                       '</div><div class="LC_grid_cell" role="gridcell" style="text-align: center;">'.
+                       $lcsec.'</div></div></div>'.
                        &Apache::lonhtmlcommon::row_closure(1);
         }
     }
@@ -5038,7 +5050,8 @@
     if (keys(%cloneable)) {
         $r->print('<div id="showexisting" style="display:none">'.
                   &clone_selection_table($dom,'owned',\%cloneable).
-                  '<fieldset style="display:inline-block"><legend>'.$lt{'dsh'}.'</legend><label>'.
+                  '<fieldset style="display: inline-block; line-height: 185%;">'.
+                  '<legend>'.$lt{'dsh'}.'</legend><label>'.
                   '<input type="radio" name="owndatemode" value="delete" /> '.$lt{'ncd'}.
                   '</label><br /><label>'.
                   '<input type="radio" name="owndatemode" value="preserve" /> '.$lt{'prd'}.
@@ -5046,7 +5059,8 @@
                   '<input type="radio" name="owndatemode" value="shift" checked="checked" /> '.
                   $lt{'shd'}.'</label>'.
                   '<input type="text" size="5" name="owndateshift" value="364" />'.
-                  '</fieldset><fieldset style="display:inline-block">'.
+                  '</fieldset>'.
+                  '<fieldset style="display: inline-block; line-height: 185%;">'.
                   '<legend>'.$lt{'dpl'}.'</legend><label>'.
                   '<input type="radio" name="owntinyurls" value="delete" />'.$lt{'nsl'}.
                   '</label><br /><label>'.


More information about the LON-CAPA-cvs mailing list