[LON-CAPA-cvs] cvs: loncom /interface courseprefs.pm lonconfigsettings.pm
raeburn
raeburn at source.lon-capa.org
Tue Jan 6 11:42:02 EST 2026
raeburn Tue Jan 6 16:42:02 2026 EDT
Modified files:
/loncom/interface courseprefs.pm lonconfigsettings.pm
Log:
- WCAG compliance
- Use <th></th> for header for each column in a data table
- Include labels for form elements
- Replace use of <table> with <div> for layout
-------------- next part --------------
Index: loncom/interface/courseprefs.pm
diff -u loncom/interface/courseprefs.pm:1.137 loncom/interface/courseprefs.pm:1.138
--- loncom/interface/courseprefs.pm:1.137 Sat Dec 13 05:56:01 2025
+++ loncom/interface/courseprefs.pm Tue Jan 6 16:42:02 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set configuration settings for a course
#
-# $Id: courseprefs.pm,v 1.137 2025/12/13 05:56:01 raeburn Exp $
+# $Id: courseprefs.pm,v 1.138 2026/01/06 16:42:02 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -739,15 +739,15 @@
exists $item->{'header'}->[0]->{'col2'}) {
$output .= '
<tr class="LC_info_row">
- <td class="LC_left_item">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>';
+ <th class="LC_left_item">'.&mt($item->{'header'}->[0]->{'col1'}).'</th>';
if ($action eq 'feedback') {
$output .= '
- <td class="LC_right_item" colspan="2">';
+ <th class="LC_right_item" colspan="2">';
} else {
$output .= '
- <td class="LC_right_item">';
+ <th class="LC_right_item">';
}
- $output .= &mt($item->{'header'}->[0]->{'col2'}).'</td>
+ $output .= &mt($item->{'header'}->[0]->{'col2'}).'</th>
</tr>';
}
$rowtotal ++;
@@ -766,15 +766,15 @@
<td>
<table class="LC_nested">
<tr class="LC_info_row">
- <td class="LC_left_item">'.&mt($item->{'header'}->[1]->{'col1'}).'</td>';
+ <th class="LC_left_item">'.&mt($item->{'header'}->[1]->{'col1'}).'</th>';
if ($action eq 'classlists') {
$output .= '
- <td class="LC_right_item" colspan="2">';
+ <th class="LC_right_item" colspan="2">';
} else {
$output .= '
- <td class="LC_right_item">';
+ <th class="LC_right_item">';
}
- $output .= &mt($item->{'header'}->[1]->{'col2'}).'</td>
+ $output .= &mt($item->{'header'}->[1]->{'col2'}).'</th>
</tr>';
if ($action eq 'classlists') {
$output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit).
@@ -789,8 +789,8 @@
exists $item->{'header'}->[2]->{'col2'}) {
$output .= '
<tr class="LC_info_row">
- <td class="LC_left_item">'.&mt($item->{'header'}->[2]->{'col1'}).'</td>
- <td class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</td>
+ <th class="LC_left_item">'.&mt($item->{'header'}->[2]->{'col1'}).'</th>
+ <th class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</th>
</tr>';
}
}
@@ -832,14 +832,14 @@
exists $item->{'header'}->[0]->{'col2'}) {
$output .= '
<tr class="LC_info_row">
- <td class="LC_left_item" valign="top">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>';
+ <th class="LC_left_item" valign="top">'.&mt($item->{'header'}->[0]->{'col1'}).'</th>';
if (($action eq 'courseinfo') || ($action eq 'localization') ||
($action eq 'print_discussion')) {
- $output .= '<td class="LC_right_item" valign="top" colspan="2">';
+ $output .= '<th class="LC_right_item" valign="top" colspan="2">';
} else {
- $output .= '<td class="LC_right_item" valign="top">';
+ $output .= '<th class="LC_right_item" valign="top">';
}
- $output .= &mt($item->{'header'}->[0]->{'col2'}).'</td>
+ $output .= &mt($item->{'header'}->[0]->{'col2'}).'</th>
</tr>';
}
}
@@ -6173,7 +6173,7 @@
} else {
@ordered = ('student_classlist_view',
'student_classlist_opt_in',
- 'student_classlist_portfiles');
+ 'student_classlist_portfiles');
}
my %lt;
@@ -6219,6 +6219,7 @@
input => 'selectbox',
options => \%lt,
order => ['disabled','all','section'],
+ id => 'student_classlist_view',
},
'student_classlist_opt_in' => {
text => '<b>'.&mt($itemtext->{'student_classlist_opt_in'}).'</b>',
@@ -8112,6 +8113,8 @@
my $rowdesc;
if ($caller eq 'appearance') {
$rowdesc = '<span class="LC_nobreak">'.$items->{$item}{text}.'</span>';
+ } elsif ($items->{$item}{id} ne '') {
+ $rowdesc = '<label for="'.$items->{$item}{id}.'">'.$items->{$item}{text}.'</label>';
} else {
$rowdesc = $items->{$item}{text};
}
@@ -8159,11 +8162,16 @@
} elsif (($item eq 'lti.topmenu') || ($item eq 'lti.inlinemenu')) {
$valueyes = '1';
}
- $datatable .= &yesno_radio($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit);
+ $datatable .= '<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'
+ .$items->{$item}{text}.'</legend>'
+ .&yesno_radio($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit)
+ .'</fieldset>';
} elsif ($items->{$item}{input} eq 'selectbox') {
my ($id,$onchange);
if ($caller eq 'menuitems') {
$id = $item;
+ } elsif ($items->{$item}{'id'} ne '') {
+ $id = $items->{$item}{'id'};
} elsif ($caller eq 'grading') {
if ($item eq 'grading') {
$onchange = ' onchange="javascript:toggleGrading(this.form);"';
@@ -8281,7 +8289,8 @@
if ($noedit) {
$disabled = ' disabled="disabled"';
}
- $datatable .= '<table align="right">';
+ $datatable .= '<div class="LC_floatright" style="margin: 0; padding: 0;">'.
+ '<div role="grid" class="LC_grid" style="margin:0; padding: 1px;">';
foreach my $user (sort(@privusers)) {
my $hideon = ' checked="checked" ';
my $hideoff = '';
@@ -8290,19 +8299,24 @@
$hideon = '';
}
my ($uname,$udom) = split(':',$user);
- $datatable .= '<tr><td align="left">'.
- &Apache::loncommon::aboutmewrapper(
- &Apache::loncommon::plainname($uname,$udom,'firstname'),
- $uname,$udom,'aboutuser').
- '</td><td align="left">'.
+ $datatable .= '<div role="row" class="LC_grid_row">'.
+ '<div role="gridcell" class="LC_grid_cell">'.
+ &Apache::loncommon::aboutmewrapper(
+ &Apache::loncommon::plainname($uname,$udom,'firstname'),
+ $uname,$udom,'aboutuser').
+ '</div><div role="gridcell" class="LC_grid_cell">'.
+ '<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.
+ &mt('[_1] in listing?',
+ &Apache::loncommon::plainname($uname,$udom,'firstname')).
+ '</legend>'.
'<span class="LC_nobreak"><label>'.
'<input type="radio" name="'.$item.'_'.$user.'"'.
$hideon.' value=""'.$disabled.' />'.&mt('Hidden').'</label> '.
'<label><input type="radio" name="'.$item.'_'.$user.'"'.
- $hideoff.' value="yes"'.$disabled.' />'.&mt('Shown').'</label></span></td>'.
- '</tr>';
+ $hideoff.' value="yes"'.$disabled.' />'.&mt('Shown').'</label></span>'.
+ '</fieldset></div></div>';
}
- $datatable .= '</table>';
+ $datatable .= '</div></div>';
} else {
if ($crstype eq 'Community') {
$datatable .= &mt('No Domain Coordinators have community roles');
@@ -8325,15 +8339,18 @@
my @excdoms = ($cdom);
my $num = 0;
if ($settings->{$item} eq '') {
- $datatable = '</td><td align="right">'.
- &Apache::loncommon::select_dom_form('','checkforpriv_'.$num,
+ my $elemname = 'checkforpriv_'.$num;
+ $datatable = '</td><td align="right"><label for="'.$elemname.'" class="LC_visually_hidden">'.
+ &mt('Other domains').'</label>'.
+ &Apache::loncommon::select_dom_form('',$elemname,
1,1,undef,undef,\@excdoms,
- $noedit);
+ $noedit,$elemname);
} else {
my @privdoms = split(/,/,$settings->{$item});
my %domains=map { $_ => 1; } &Apache::lonnet::all_domains();
- $datatable = '</td><td align="right"><br />'.
- &Apache::loncommon::start_data_table();
+ $datatable = '</td><td align="right">'.
+ '<div class="LC_floatright" style="margin: 0; padding: 0;">'.
+ '<div role="grid" class="LC_grid" style="margin:0; padding: 1px;">';
my $disabled;
if ($noedit) {
$disabled = ' disabled="disabled"';
@@ -8346,15 +8363,16 @@
$domdesc = $currdom;
}
$datatable .=
- &Apache::loncommon::start_data_table_row().
- '<td align="left"><span class="LC_nobreak">'.
- &mt('Domain:').'<b> '.$domdesc.
- '</b><input type="hidden" name="checkforpriv_'.$num.
- '" value="'.$currdom.'" /></span><br />'.
+ '<div role="row" class="LC_grid_row">'.
+ '<div role="gridcell" class="LC_grid_cell" style="margin:0; padding:0">'.
+ '<fieldset>'.
+ '<legend>'.$domdesc.'</legend>'.
+ '<input type="hidden" name="checkforpriv_'.$num.
+ '" value="'.$currdom.'" />'.
'<span class="LC_nobreak"><label><input type="checkbox" '.
'name="checkforpriv_delete" value="'.$num.'"'.$disabled.' />'.
- &mt('Delete').'</label></span></td>'.
- &Apache::loncommon::end_data_table_row();
+ &mt('Delete').'</label></span></fieldset></div>'.
+ '</div>';
$num ++;
unless (grep(/^\Q$currdom\E$/, at excdoms)) {
push(@excdoms,$currdom);
@@ -8363,14 +8381,16 @@
}
if ((scalar(keys(%domains)) - scalar(@excdoms)) > 0) {
$datatable .=
- &Apache::loncommon::start_data_table_row().
- '<td align="left"><span class="LC_nobreak">'.
- &mt('Additional domain:'). '</span><br />'.
+ '<div role="row" class="LC_grid_row">'.
+ '<div role="gridcell" class="LC_grid_cell" style="margin:0; padding:0">'.
+ '<fieldset><legend><label for="checkforpriv_'.$num.'">'.
+ &mt('Additional domain').'</label></legend>'.
&Apache::loncommon::select_dom_form('','checkforpriv_'.$num,1,
- 1,undef,undef,\@excdoms,$noedit).
- '</td>'.&Apache::loncommon::end_data_table_row();
+ 1,undef,undef,\@excdoms,$noedit,
+ 'checkforpriv_'.$num).
+ '</fieldset></div></div>';
}
- $datatable .= &Apache::loncommon::end_data_table().
+ $datatable .= '</div></div>'.
'<input type="hidden" name="checkforpriv_total" value="'.$num.'" />'.
'<br />';
}
Index: loncom/interface/lonconfigsettings.pm
diff -u loncom/interface/lonconfigsettings.pm:1.79 loncom/interface/lonconfigsettings.pm:1.80
--- loncom/interface/lonconfigsettings.pm:1.79 Wed Dec 24 02:34:27 2025
+++ loncom/interface/lonconfigsettings.pm Tue Jan 6 16:42:02 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: lonconfigsettings.pm,v 1.79 2025/12/24 02:34:27 raeburn Exp $
+# $Id: lonconfigsettings.pm,v 1.80 2026/01/06 16:42:02 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -797,8 +797,10 @@
}
if ($container) {
&Apache::lonparmset::endSettingsScreen($r);
+ } else {
+ $r->print('</div>');
}
- $r->print('</div>'.&Apache::loncommon::end_page());
+ $r->print(&Apache::loncommon::end_page());
return;
}
More information about the LON-CAPA-cvs
mailing list