[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